package cn.lingyangwl.agile.model.constants;

import cn.lingyangwl.framework.tool.core.exception.BizException;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;

/**
 * 用户常量信息
 * 所有状态都从1开始, > 1 都是异常的
 * @author shenguangyang
 */
public interface UserCons {
    /**
     * 管理员账号
     */
    Long ADMIN_ID = 1L;


    interface Role {
        /**
         * 超级管理员
         */
        Long ADMIN_ID = 1L;
        String ADMIN_NAME = "超级管理员";
    }

    interface Status {
        /** 正常 */
        String NORMAL = "1";
        /** 封禁 */
        String DISABLE = "2";
        /** 删除 */
        String DELETED = "3";
    }

    interface UserName {
        /**
         * 用户名长度限制
         */
        int MIN_LENGTH = 2;

        int MAX_LENGTH = 20;
    }

    interface Password {
        /**
         * 密码长度限制
         */
        int MIN_LENGTH = 5;

        int MAX_LENGTH = 20;
    }
    
    interface Oauth {
        /**
         * 登录成功
         */
        String LOGIN_SUCCESS = "Success";

        /**
         * 注销
         */
        String LOGOUT = "Logout";

        /**
         * 注册
         */
        String REGISTER = "Register";

        /**
         * 登录失败
         */
        String LOGIN_FAIL = "Error";
    }

    @Getter
    @AllArgsConstructor
    enum Source {
        /**
         * 系统后台管理
         */
        SYS_ADMIN("1", "system_admin"),
        /**
         * 租户应用
         */
        TENANT_APP("3", "tenant_app"),
        /**
         * 其他
         */
        OTHER("4", "other"),

        ;
        private final String code;
        private final String headerValue;

        public static Source getByValue(String headerValue) {
            if (StringUtils.isEmpty(headerValue)) {
                return OTHER;
            }
            return Arrays.stream(values()).filter(e -> e.headerValue.equals(headerValue))
                    .findFirst()
                    .orElseThrow(() -> new BizException("传递的 {} 值不存在", RequestCons.Headers.SYSTEM_TYPE));
        }
    }
}
